package com.waidaiqiange.manager.controller;

import com.waidaiqiange.manager.domain.Student;
import com.waidaiqiange.manager.service.IStudentService;
import com.waidaiqiange.manager.service.impl.StudentServiceImpl;

import java.util.ArrayList;
import java.util.Scanner;
/**
 * @author 万代千歌
 */
public class StudentController {
    private IStudentService iStudentService = new StudentServiceImpl();
    private Scanner sc = new Scanner(System.in);

    /**
     * 主菜单
     */
    public void start() {
        boolean flag = true;

        while (flag) {
            System.out.println("1-新增学生");
            System.out.println("2-查看所有的学生");
            System.out.println("3-删除学生");
            System.out.println("4-修改学生信息");

            System.out.println("0-退出");
            System.out.println("请输入你的选择");
            String choice = sc.next();

            //输入数字进入对应的方法
            switch (choice) {
                case "1":
                    add();
                    break;
                case "2":
                    findAll();
                    break;
                case "3":
                    remove();
                    break;
                case "4":
                    set();
                    break;
                case "0":
                    System.out.println("谢谢使用");
                    flag = false;
                    break;
                default:
                    System.out.println("输入有误");
                    break;
            }
        }
    }

    /**
     * 修改方法
     */
    private void set() {
        //判断学号是否存在
        String sid = inputSid();
        //根据存在的学号寻找下标index
        int index = iStudentService.getIndexBySid(sid);
        //调用录入学生信息方法，并存入到新的学生对象
        Student student = getStudent(sid);
        //调用修改方法
        boolean set = iStudentService.set(index, student);
        if (set) {
            System.out.println("修改成功");
        } else {
            System.out.println("修改失败");
        }
    }

    /**
     * 判断学号是否存在
     * @return 如果学号不存在，返回该学号
     */
    private String inputSid() {
        String sid;
        while (true) {
            System.out.println("请输入学号");
             sid = sc.next();
             //判断该id是否存在，如果不存在则返回id
            int index = iStudentService.getIndexBySid(sid);
            if (index == -1) {
                System.out.println("该学号不存在，请重新输入");
            } else {
                break;
            }
        }
        return sid;
    }

    /**
     * 输入学生信息
     * @param sid 学号
     * @return 返回学生对象
     */
    private Student getStudent(String sid) {
        System.out.println("请输入姓名");
        String name = sc.next();
        System.out.println("请输入年龄");
        int age = sc.nextInt();
        //将输入的信息存到学生对象中
        return new Student(sid, name, age);
    }

    /**
     * 删除方法
     */
    private void remove() {
        //判断id是否存在
        String sid = inputSid();
        //根据存在id寻找下标
        int index = iStudentService.getIndexBySid(sid);
        //调用删除方法
        boolean remove = iStudentService.remove(index);
        if (remove) {
            System.out.println("删除成功");
        } else {
            System.out.println("删除失败");
        }
    }

    /**
     * 查找学生信息
     */
    private void findAll() {
        ArrayList<Student> list = iStudentService.findAll();
        //如果集合为空，则给出提示
        if (list.size() == 0) {
            System.out.println("暂无信息，请添加后再查询");
            return;
        }
        //遍历打印集合
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

    /**
     * 添加学生
     */
    private void add() {
        String sid;
        //判断学号是否存在，不存在的话则跳出死循环进入下一步操作
        while (true) {
            System.out.println("请输入学号");
            sid = sc.next();
            int index = iStudentService.getIndexBySid(sid);
            if (index != -1) {
                System.out.println("该学号已存在，请重新输入");
            } else {
                break;
            }
        }
        Student stu = getStudent(sid);

        //调用添加方法
        boolean add = iStudentService.add(stu);
        if (add) {
            System.out.println("添加信息成功");
        } else {
            System.out.println("添加信息失败");
        }
    }
}
